var arr = [
  { id: '29', pid: '', name: '总裁办' },
  { id: '2c', pid: '', name: '财务部' },
  { id: '2d', pid: '2c', name: '财务核算部' },
  { id: '2f', pid: '2c', name: '薪资管理部' },
  { id: 'd2', pid: '', name: '技术部' },
  { id: 'd3', pid: 'd2', name: 'Java研发部' }
]

// [
// 	{ id: '29', pid: '', name: '总裁办' },
// 	{
// 		id: '2c',
// 		pid: '',
// 		name: '财务部',
// 		children: [ { id: '2d', pid: '2c', name: '财务核算部' }, { id: '2f', pid: '2c', name: '薪资管理部' } ]
// 	},
// 	{ id: 'd2', pid: '', name: '技术部',children:[{ id: 'd3', pid: 'd2', name: 'Java研发部' }] },

// ]

/*
  1-定义一个映射关系 map对象
  map={
    29:	{ id: '29', pid: '', name: '总裁办',children:[] },
    2c:{ id: '2c', pid: '', name: '财务部' },
  }
  2-定义每一项有一个children  值：[]
  3-根据条件进行匹配  pid和id相同  筛选出来
   */

function toDo(arr) {
  var map = {}
  var newArr = [] //  收集处理后的数据
  arr.forEach((item1) => {
    map[item1.id] = item1
    item1.children = []
  })
  console.log(map)

  arr.forEach((item2) => {
    // console.log(item2);
    // 4-获取有子集的父级或者为空
    var parent = map[item2.pid]
    /*
    undefined 888
    undefined 888
    { id: '2c', pid: '', name: '财务部', children: [] } 888
    { id: '2c', pid: '', name: '财务部', children: [] } 888
    undefined 888
    { id: 'd2', pid: '', name: '技术部', children: [] } 888

     */
    // 5-判断parent是否有值，有值获取的是父级 ，需要往里面添加子集
    if (parent) {
      //  往一级添加二级
      parent.children.push(item2)
    } else {
      // 6- 不满足的就收集===收集的是一级
      newArr.push(item2)
    }
    // console.log(parent,888);
  })

  return newArr

  // console.log(newArr,6666);
}

//  调用
console.log(toDo(arr), 444)
